package org.rslai.tcedit.business;

import java.util.List;
import java.util.Set;
import org.rslai.tcedit.domain.Page;
import org.rslai.tcedit.domain.Product;
import org.rslai.tcedit.domain.Version;
import org.springframework.transaction.annotation.Transactional;

/**
 * 产品 业务逻辑接口
 * @author rslai
 */
@Transactional
public interface ProductService extends BaseService {

	/**
	 * 新增一个产品
	 * @param product Product对象
	 * @param version Version对象列表
	 */
	void create(Product product, Set<Version> version);

	/**
	 * 更新一个产品
	 * @param product Product对象
	 * @param version Version对象列表
	 */
	void update(Product product, Set<Version> version);

	/***
	 * 查询产品列表
	 * @param asc true 为升序，false 为降序
	 * @return
	 */
	@Transactional(readOnly = true)
	public List<Product> query(boolean asc);

	/**
	 * 根据输入的产品名、产品描述查询产品列表
	 * @param page
	 * @param name 产品名，前后加 % 号为模糊查询，例如：%executeState%。不加 % 为精确查询。 只有 % 为查询所有
	 * @param describing 产品描述，前后加 % 号为模糊查询，例如：%Product%。不加 % 为精确查询。 只有 % 为查询所有
	 * @param asc true 为升序，false 为降序
	 * @return 产品列表
	 */
	@Transactional(readOnly = true)
	List<Product> query(Page page, String name, String describing, boolean asc);

	/**
	 * 初始化一个产品，此处只创建实体文件没有创建动态数据表
	 * @param product Product对象
	 */
	void init(Product product);

}
